#ifndef PRUEBAESTRATEGIAUNALMACENAMIENTO_H_
#define PRUEBAESTRATEGIAUNALMACENAMIENTO_H_

#include "../FabricaRecursos.h"
#include "Alumno.h"
#include "ClaveAlumno.h"


void pruebaAltasyBusquedas(Toolkit::RecursoAlmacenamiento* recurso, 
		Toolkit::TipoSerializacion tSerializacion) {
	
	Toolkit::Alumno facundo(87712, 33115999, "Facundo Olano Jr.", tSerializacion);
	recurso->guardarDato(facundo, Toolkit::ClaveAlumno(facundo.getPadron(), tSerializacion));			
				
	Toolkit::Alumno dupont(55555, 33115999, "Marcel Dupont", tSerializacion);
	recurso->guardarDato(dupont, Toolkit::ClaveAlumno(dupont.getPadron(), tSerializacion));
	
	Toolkit::Alumno artigas(11111, 33115999, "Pepe Artigas", tSerializacion);
	recurso->guardarDato(artigas, Toolkit::ClaveAlumno(artigas.getPadron(), tSerializacion));
	
	Toolkit::Alumno iorio(88712, 33115999, "Ricardo de la Concepción Iorio", tSerializacion);
	recurso->guardarDato(iorio, Toolkit::ClaveAlumno(iorio.getPadron(), tSerializacion));
	
	Toolkit::Alumno carolo(33333, 33115999, "Carolo Bazofio", tSerializacion);
	recurso->guardarDato(carolo, Toolkit::ClaveAlumno(carolo.getPadron(), tSerializacion));
	
	Toolkit::Alumno pelotudo(22222, 33115999, "Juan Carlos Pelotudo", tSerializacion);
	recurso->guardarDato(pelotudo, Toolkit::ClaveAlumno(pelotudo.getPadron(), tSerializacion));
	
	Toolkit::Alumno brown(87713, 33115999, "Luis Almirante Brown", tSerializacion);
	recurso->guardarDato(brown, Toolkit::ClaveAlumno(brown.getPadron(), tSerializacion));
	
	Toolkit::Alumno aux(0, 33115999, "AUXILIAR", tSerializacion);
	recurso->recuperarDato(Toolkit::ClaveAlumno(facundo.getPadron(), tSerializacion), aux);
	cout << "dato leído, nombre: " << aux.getNombre() << " padron: " 
			<< aux.getPadron() << endl;
			
	recurso->recuperarDato(Toolkit::ClaveAlumno(pelotudo.getPadron(), tSerializacion), aux);
	cout << "dato leído, nombre: " << aux.getNombre() << " padron: " 
			<< aux.getPadron() << endl;	
	
}

void pruebaAltasyBusquedasBuffer() {
	Toolkit::TipoSerializacion tSerializacion = Toolkit::TEXTO;
	
	Toolkit::RecursoAlmacenamiento *recurso = 
			Toolkit::FabricaRecursos::instancia().recursoBuffer(Toolkit::A_BLOQUES, 150);
			
	pruebaAltasyBusquedas(recurso, tSerializacion);
	
	delete recurso;
}

void pruebaAltasyBusquedasArchivo() 
{
	Toolkit::TipoSerializacion tSerializacion = Toolkit::TEXTO;
	
	Toolkit::RecursoAlmacenamiento *recurso = 
			Toolkit::FabricaRecursos::instancia().recursoArchivo(
			"", "pruebaRecurso.txt",Toolkit::A_BLOQUES, 150, Toolkit::SIN_INDEXADO);
			
	pruebaAltasyBusquedas(recurso, tSerializacion);
	
	delete recurso;	
}

void pruebaAltasyBusquedasDirecta() {
	Toolkit::TipoSerializacion tSerializacion = Toolkit::TEXTO;
	
	Toolkit::RecursoAlmacenamiento *recurso = 
			Toolkit::FabricaRecursos::instancia().recursoBufferArchivo(
			"", "pruebaRecurso.txt", Toolkit::A_BLOQUES, 150, Toolkit::SIN_INDEXADO);
			
	pruebaAltasyBusquedas(recurso, tSerializacion);
	
	delete recurso;	
}


void pruebaBajasyModificacionesBusquedas(Toolkit::RecursoAlmacenamiento* recurso, 
		Toolkit::TipoSerializacion tSerializacion) {
	
	Toolkit::Alumno facundo(87712, 33115999, "Facundo Olano Jr.", tSerializacion);
	recurso->guardarDato(facundo, Toolkit::ClaveAlumno(facundo.getPadron(), tSerializacion));			
				
	Toolkit::Alumno dupont(55555, 33115999, "Marcel Dupont", tSerializacion);
	recurso->guardarDato(dupont, Toolkit::ClaveAlumno(dupont.getPadron(), tSerializacion));
	
	Toolkit::Alumno artigas(11111, 33115999, "Pepe Artigas", tSerializacion);
	recurso->guardarDato(artigas, Toolkit::ClaveAlumno(artigas.getPadron(), tSerializacion));
	
	Toolkit::Alumno iorio(88712, 33115999, "Ricardo de la Concepción Iorio", tSerializacion);
	recurso->guardarDato(iorio, Toolkit::ClaveAlumno(iorio.getPadron(), tSerializacion));
	
	Toolkit::Alumno carolo(33333, 33115999, "Carolo Bazofio", tSerializacion);
	recurso->guardarDato(carolo, Toolkit::ClaveAlumno(carolo.getPadron(), tSerializacion));
	
	Toolkit::Alumno pelotudo(22222, 33115999, "Juan Carlos Pelotudo", tSerializacion);
	recurso->guardarDato(pelotudo, Toolkit::ClaveAlumno(pelotudo.getPadron(), tSerializacion));
	
	//elimino uno
	recurso->eliminarDato(Toolkit::ClaveAlumno(carolo.getPadron(), tSerializacion), carolo);
	
	cout << "Dato eliminado: " << carolo.getNombre() << ", padron: " 
			<< carolo.getPadron() << endl;	
	
	Toolkit::Alumno brown(87713, 33115999, "Luis Almirante Brown", tSerializacion);
	recurso->guardarDato(brown, Toolkit::ClaveAlumno(brown.getPadron(), tSerializacion));
	
	//busco uno del medio
	Toolkit::Alumno aux(0, 33115999, "AUXILIAR", tSerializacion);
	recurso->recuperarDato(Toolkit::ClaveAlumno(artigas.getPadron(), tSerializacion), aux);
	cout << "dato leído, nombre: " << aux.getNombre() << " padron: " 
			<< aux.getPadron() << endl;
			
	//modifico otro
	Toolkit::Alumno dupontModificado(55555, 33115999, "El artista antes conocido como Marcel Dupont", tSerializacion);
	recurso->actualizarDato(dupontModificado, Toolkit::ClaveAlumno(dupont.getPadron(), tSerializacion));
	
	recurso->recuperarDato(Toolkit::ClaveAlumno(dupont.getPadron(), tSerializacion), aux);
	cout << "dato leído, nombre: " << aux.getNombre() << " padron: " 
			<< aux.getPadron() << endl;
}

void pruebaBajasyModificacionesBusquedasBuffer() {
	Toolkit::TipoSerializacion tSerializacion = Toolkit::TEXTO;
	
	Toolkit::RecursoAlmacenamiento *recurso = 
			Toolkit::FabricaRecursos::instancia().recursoBuffer(Toolkit::A_BLOQUES, 150);
			
	pruebaBajasyModificacionesBusquedas(recurso, tSerializacion);
	
	delete recurso;
}

void pruebaBajasyModificacionesBusquedasArchivo() {
	Toolkit::TipoSerializacion tSerializacion = Toolkit::TEXTO;
	
	Toolkit::RecursoAlmacenamiento *recurso = 
			Toolkit::FabricaRecursos::instancia().recursoArchivo(
			"", "pruebaRecurso.txt", Toolkit::A_BLOQUES, 150, Toolkit::SIN_INDEXADO);
			
	pruebaBajasyModificacionesBusquedas(recurso, tSerializacion);
	
	delete recurso;
}

void pruebaBajasyModificacionesBusquedasDirecta () {
	Toolkit::TipoSerializacion tSerializacion = Toolkit::TEXTO;
	
	Toolkit::RecursoAlmacenamiento *recurso = 
			Toolkit::FabricaRecursos::instancia().recursoBufferArchivo(
			"", "pruebaRecurso.txt", Toolkit::A_BLOQUES, 150, Toolkit::SIN_INDEXADO);
			
	pruebaBajasyModificacionesBusquedas(recurso, tSerializacion);
	
	delete recurso;
}










#endif /*PRUEBAESTRATEGIAUNALMACENAMIENTO_H_*/

